A history buffer generally enables the deletion of previously issued instructions in a processor which issues instructions speculatively and has out-of-order completion. For each issued instruction, a pointer to the destination register (i.e. the number of the destination register), and the data stored in the destination register, is saved in the history buffer.
When implementing a history buffer system, several factors need to be considered. For example, different instructions have different operands. The destination registers of the different instructions usually have different sizes. Moreover, some instructions do not effect registers, and in some architectures, some instructions effect two registers, each of which may be of a different size. For example:
a fixed point arithmetic instruction effects fixed point registers which are 32 bits in size; PA1 a floating point arithmetic instruction effects floating point registers which are 64 bits in size; PA1 a store instruction does not effect any general purpose register; PA1 a fixed point load with update instruction effects two fixed point registers; and PA1 a floating point load with update instruction effects one fixed point register and one floating point register.
In order to account for the different sizes of the different data types which are to be stored in the history buffer, typically a fixed size entry is allocated for each instruction which is large enough for the data having the greatest size. For example, an entry having an 64 bit data field (plus other fields) is allocated for each instruction. Thus, whenever a fixed point instruction is issued, 32 bits (64-32) of the allocated history buffer entry are not used. Moreover, whenever a store instruction is issued, none of the allocated 64 bits are used.
The prior art history buffer systems therefore inefficiently utilize storage space, with a result that larger silicon area is required than is necessary.
In a processor which does not have a floating point unit, a history buffer which supports floating point instructions requires significant storage area which is not utilized.
There is therefore a need for a history buffer system which utilize the storage area in a more efficient manner.